package com.srtp.secureprotocol.cipherstream;

import java.io.IOException;
import java.io.OutputStream;

/**
 * 加密输出流工厂类，用于创建支持加密功能的输出流。
 * 实现了OutputStreamFactory接口，根据提供的密钥和初始化向量生成CipherOutputStream实例。
 */
public class CipherOutputStreamFactory implements OutputStreamFactory {

    private final byte[] key; // 加密使用的密钥
    private final byte[] iv;  // 加密使用的初始化向量（Initialization Vector）

    /**
     * 构造方法，初始化加密输出流工厂。
     *
     * @param key 加密密钥，字节数组形式
     * @param iv  初始化向量，字节数组形式
     */
    public CipherOutputStreamFactory(byte[] key, byte[] iv) {
        this.key = key;
        this.iv  = iv;
    }

    /**
     * 创建加密输出流，将普通输出流包装为加密流。
     *
     * @param wrap 需要被包装的底层输出流（如文件流、网络流等）
     * @return 返回实现了DigestingOutputStream接口的CipherOutputStream实例
     * @throws IOException 如果在创建加密流过程中发生I/O错误
     */
    @Override
    public DigestingOutputStream createFor(OutputStream wrap) throws IOException {
        // 使用存储的密钥和初始化向量创建加密输出流
        return new CipherOutputStream(key, iv, wrap);
    }
}